<?php
//Ultima verificacion: 14-10-2014 ; 21-11-2014 ; 05-03-2015
class M_evaluacion extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener las evaluaciones existentes menos las borradas (-1)
	function buscar($restriccion=null){
		$consulta = $this->db->query("SELECT evaluacion.*, ciclolectivo.idCicloLectivo,
											 (SELECT tipoevaluacion.nombre FROM tipoevaluacion WHERE tipoevaluacion.idTipoEvaluacion=evaluacion.idTipoEvaluacion AND tipoevaluacion.estado<>-1 LIMIT 1) as tipoEvaluacion,
											 DATE_FORMAT(evaluacion.fechaEvaluacion,'%d/%m/%Y') AS fechaEvaluacionFormateada,
											 DATE_FORMAT(evaluacion.fechaResultado,'%d/%m/%Y') AS fechaResultadoFormateada,
											 DATE_FORMAT(evaluacion.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											 DATE_FORMAT(evaluacion.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM evaluacion, asignatura, division, curso, ciclolectivo, turno
									  WHERE evaluacion.idAsignatura=asignatura.idAsignatura AND
											asignatura.idDivision=division.idDivision AND 
											division.idCurso=curso.idCurso AND
											curso.idCicloLectivo=ciclolectivo.idCicloLectivo AND 
											curso.idTurno=turno.idTurno AND 
											evaluacion.estado<>-1 AND 
											asignatura.estado=1 AND 
											division.estado=1 AND 
											curso.estado=1 AND											
											ciclolectivo.estado<>-1 AND 
											turno.estado=1 $restriccion
									  ORDER BY evaluacion.fechaEvaluacion DESC, evaluacion.nombre ASC");
		return($consulta);
	}
			
	//Este metodo se utiliza cuando queremos obtener las evaluaciones activas
	function buscarActivos($restriccion=null, $orderBy=null){
		if($orderBy == null) $orderBy = "evaluacion.fechaEvaluacion DESC, evaluacion.nombre ASC";
		
		$consulta = $this->db->query("SELECT evaluacion.*, ciclolectivo.idCicloLectivo, asignatura.nombre AS asignatura, asignatura.colorDeFondo AS colorDeFondo, asignatura.colorDeTexto AS colorDeTexto,
											 (SELECT tipoevaluacion.nombre FROM tipoevaluacion WHERE tipoevaluacion.idTipoEvaluacion=evaluacion.idTipoEvaluacion AND tipoevaluacion.estado<>-1 LIMIT 1) as tipoEvaluacion,
											 (SELECT hash FROM archivo WHERE archivo.idArchivo=evaluacion.idArchivo LIMIT 1) AS hashArchivo,
											 DATE_FORMAT(evaluacion.fechaEvaluacion,'%d/%m/%Y') AS fechaEvaluacionFormateada,
											 DATE_FORMAT(evaluacion.fechaResultado,'%d/%m/%Y') AS fechaResultadoFormateada,
											 DATE_FORMAT(evaluacion.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											 DATE_FORMAT(evaluacion.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM evaluacion, asignatura, division, curso, ciclolectivo, turno
									  WHERE evaluacion.idAsignatura=asignatura.idAsignatura AND
											asignatura.idDivision=division.idDivision AND 
											division.idCurso=curso.idCurso AND
											curso.idCicloLectivo=ciclolectivo.idCicloLectivo AND 
											curso.idTurno=turno.idTurno AND 
											evaluacion.estado=1 AND 
											asignatura.estado=1 AND 
											division.estado=1 AND 
											curso.estado=1 AND											
											ciclolectivo.estado<>-1 AND 
											turno.estado=1 $restriccion
									  ORDER BY ".$orderBy);
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar una evaluacion
	function eliminar($idEvaluacion=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `evaluacion` 
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `evaluacion`.`idEvaluacion` = " . $this->db->escape($idEvaluacion) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear una evaluacion
	function crear($idAsignatura=null, $recuperatorio=null, $idTipoEvaluacion=null, $nombre=null, $notaMinima=null, $idArchivo=null, $descripcion=null, $fechaEvaluacion=null, $fechaResultado=null, $estado=null, $idCreador=null){
		$this->db->query("INSERT INTO `evaluacion` (`idEvaluacion`,`idAsignatura`,`recuperatorio`,`idTipoEvaluacion`,`nombre`,`notaMinima`,`idArchivo`,`descripcion`,`fechaEvaluacion`,`fechaResultado`,`fechaCreacion`,`estado`,`idCreador`) VALUES 
												   (NULL,".$this->db->escape($idAsignatura).",".$this->db->escape($recuperatorio).",".$this->db->escape($idTipoEvaluacion).",".$this->db->escape($nombre).",".$this->db->escape($notaMinima).",".$this->db->escape($idArchivo).",".$this->db->escape($descripcion).",".$this->db->escape($fechaEvaluacion).",".$this->db->escape($fechaResultado).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
		
	//Este metodo se utiliza cuando queremos devolver una evaluacion en particular usado generalmente en el formulario de modificar
	function get($idEvaluacion=null, $restriccion=null){
		$consulta = $this->db->query("SELECT evaluacion.*, ciclolectivo.idCicloLectivo, asignatura.nombre AS asignatura, asignatura.idAsignatura AS idAsignatura,
											 (SELECT tipoevaluacion.nombre FROM tipoevaluacion WHERE tipoevaluacion.idTipoEvaluacion=evaluacion.idTipoEvaluacion AND tipoevaluacion.estado<>-1 LIMIT 1) as tipoEvaluacion,
											 (SELECT hash FROM archivo WHERE archivo.idArchivo=evaluacion.idArchivo LIMIT 1) AS hashArchivo,
											 DATE_FORMAT(evaluacion.fechaEvaluacion,'%d/%m/%Y') AS fechaEvaluacionFormateada,
											 DATE_FORMAT(evaluacion.fechaResultado,'%d/%m/%Y') AS fechaResultadoFormateada,
											 DATE_FORMAT(evaluacion.fechaEvaluacion,'%d-%m-%Y') AS fechaEvaluacionFormateada2,
											 DATE_FORMAT(evaluacion.fechaResultado,'%d-%m-%Y') AS fechaResultadoFormateada2
									  FROM evaluacion, asignatura, division, curso, ciclolectivo, turno
									  WHERE evaluacion.idAsignatura=asignatura.idAsignatura AND
											asignatura.idDivision=division.idDivision AND 
											division.idCurso=curso.idCurso AND
											curso.idCicloLectivo=ciclolectivo.idCicloLectivo AND 
											curso.idTurno=turno.idTurno AND 
											evaluacion.estado<>-1 AND 
											asignatura.estado<>-1 AND 
											division.estado<>-1 AND 
											curso.estado<>-1 AND											
											ciclolectivo.estado<>-1 AND 
											turno.estado<>-1 AND 
											evaluacion.idEvaluacion=".$this->db->escape($idEvaluacion)." $restriccion
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver la evaluacion contigua a una en particular usada generalmente en el formulario de modificar
	function getContiguo($idEvaluacion=null, $cant=null, $idAsignatura=null){
		do{
			$idEvaluacion+=$cant;
			$consulta = $this->db->query("SELECT *
										  FROM evaluacion
										  WHERE idEvaluacion=".$this->db->escape($idEvaluacion)."
										  LIMIT 1");
			if($consulta->num_rows == 0)
				return(0);
			
		}while($consulta->row()->estado=='-1' || $consulta->row()->idAsignatura != $idAsignatura);
				
		return($consulta->row()->idEvaluacion);
	}
	
	//Este metodo se utiliza para modificar una evaluacion
	function modificar($idEvaluacion=null, $idAsignatura=null, $recuperatorio=null, $idTipoEvaluacion=null, $nombre=null, $notaMinima=null, $idArchivo=null, $descripcion=null, $fechaEvaluacion=null, $fechaResultado=null, $estado=null){
		$consulta = $this->db->query("UPDATE `evaluacion`
									 SET `idAsignatura` = ". $this->db->escape($idAsignatura) .",
										 `recuperatorio` = ". $this->db->escape($recuperatorio) .",
										 `idTipoEvaluacion` = ". $this->db->escape($idTipoEvaluacion) .",
										 `nombre` = ". $this->db->escape($nombre) .",
										 `notaMinima` = ". $this->db->escape($notaMinima) .",
										 `idArchivo` = ". $this->db->escape($idArchivo) .",
										 `descripcion` = ". $this->db->escape($descripcion) .",										  
										 `fechaEvaluacion` = ". $this->db->escape($fechaEvaluacion) .",
										 `fechaResultado` = ". $this->db->escape($fechaResultado) .",
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `evaluacion`.`idEvaluacion` = " . $this->db->escape($idEvaluacion) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>